#include <iostream>
//#include <cstdio>
#include <signal.h>
#include <unistd.h>

using namespace std;


int main()
{
    signal(SIGCHLD,SIG_IGN);

    if(fork()==0)
    {
        cout<<"子进程"<<endl;
        sleep(1);
        return 0;
    }


    while(true)
    {
        cout<<"parent getpid"<<getpid()<< "执行自己的任务" <<endl;
        sleep(1);
    }
}

// void handler(int signum)
// {
//     cout<<"子进程退出"<<endl;
// }
// int main()
// {
//     signal(17,handler);
//     if(fork()==0)
//     {

//         cout << "child pid: " << getpid() << endl;
//         sleep(1);
//         //exit(0);
//         //abort();
//         return 0;
//     }
//     while(true) sleep(1);
// }
//  volatile int flag=0;
// void changeflag(int sig)
// {
//     (void)sig;
//     cout <<"change flag: "<< flag;
//     flag = 1;
//     cout << "->" << flag << endl;
// }
// int main()
// {
//     signal(2,changeflag);
//     while(!flag);
//     cout<<"退出"<< flag<<endl;
// }

// void showPending(sigset_t *pending)
// {
//     for(int signum=1;signum<=31;signum++)
//     {
//         if(sigismember(pending,signum)) cout<<"1";//是否抵达
//         else cout << "0";
//     }
//     cout<<endl;
// }
// void handler(int signum)
// {
//     cout<<"获取了一个信号"<<endl;
//     cout<<"获取了一个信号"<<endl;
//     cout<<"获取了一个信号"<<endl;
//     cout<<"获取了一个信号"<<endl;
//     cout<<"获取了一个信号"<<endl;

//     sigset_t pending;
//     int c = 20;
//     while(true)
//     {
//         sigpending(&pending);
//         showPending(&pending);
//         c--;
//         //cout<<c<<endl;
//         if(!c) break;
//         sleep(1);
//     }
// }
// int main()
// {


//     //signal(2,handler);    
//     cout<<"getpid:"<<getpid()<<endl;
//     struct sigaction act, oact;//struct 结构体
//     act.sa_flags = 0;
//     sigemptyset(&act.sa_mask);
//     act.sa_handler = handler;

//     sigaddset(&act.sa_mask,3);//将当前信号添加到信号集中
//     sigaddset(&act.sa_mask,4);
//     sigaddset(&act.sa_mask,5);
//     sigaddset(&act.sa_mask,6);
//     sigaddset(&act.sa_mask,7);
//     //设置当前调用的pcb中
//     sigaction(3, &act, &oact);

//     cout << "default action : " << (int)(oact.sa_handler) << endl;

//     while(true) sleep(1);


//     return 0;
// }
